#coding:utf-8

from Person import Person #从Peron.py文件中导入perons类

class Student(Person):
    #重写构造函数，增加了school新实例变量
    def __init__(self,school,name,age):
        #第一步：初始化子类特有属性
        self.school = school

        #第二步：初始化父类属性
        #方法1：父类名调用构造方法，方法中必须传入self参数，但不推荐使用
        #Person.__init__(self,name,age)  
        #方法2：使用super关键字
        super(Student,self).__init__(name,age)


    def doHomeWork(self):
        super(Student,self).doHomeWork()
        print("Student do homework！")

#测试继承：
#1.创建子类，由于继承了父类属性，可以访问父类中定义的属性
stu = Student("光明小学","小明",18)
print(stu.name)       #打印父类定义的实例变量name
print(Student.sum)    #打印父类定义的类变量sum
print(stu.sum)        #打印父类定义的类变量sum

#2.调用父类中定义的实例方法
#调用方法1：父类名+实例方法名(传入当前实例参数)
Person.get_name(stu)  
#调用方法2：使用子类实例调用
stu.get_name()

#3.测试打印子类特有的属性
print(stu.school)     #打印子类特有的实例变量school

#覆写父类方法：子类会覆盖父类中同名的方法
stu.doHomeWork()


'''
总结
1.Python支持多继承，但是并不推荐大量使用；

2.在子类中使用super可能会报错；
super只能用于Python的新类中，如果基类是经典类，则会报这个错:TypeError: must be type, not classobj
新类：所有类都必须要有继承的类，如果什么都不想继承，就继承到object类。
经典类：什么都不用继承的类
所以为了解决这一问题，代码里的Perosn类继承了object
'''